/******************************************************************************* * Copyright (c) 2000, 2008 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.jdt.ui.tests.refactoring; import junit.framework.Test; import junit.framework.TestSuite; import org.eclipse.jdt.testplugin.JavaProjectHelper; import org.eclipse.core.runtime.Path; import org.eclipse.ltk.core.refactoring.RefactoringStatus; import org.eclipse.ltk.core.refactoring.participants.RenameArguments; import org.eclipse.ltk.core.refactoring.participants.RenameRefactoring; import org.eclipse.jdt.core.IAccessRule; import org.eclipse.jdt.core.IClasspathAttribute; import org.eclipse.jdt.core.IClasspathEntry; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.refactoring.IJavaRefactorings; import org.eclipse.jdt.core.refactoring.descriptors.RenameJavaElementDescriptor; import org.eclipse.jdt.internal.core.refactoring.descriptors.RefactoringSignatureDescriptorFactory; public class RenameJavaProjectTests extends RefactoringTest { private static final Class clazz= RenameJavaProjectTests.class; public RenameJavaProjectTests(String name) { super(name); } public static Test suite() { return new RefactoringTestSetup(new TestSuite(clazz)); } protected void setUp() throws Exception { super.setUp(); fIsPreDeltaTest= true; } public void test0() throws Exception { IJavaProject p1= null; IJavaProject referencing1= null; IJavaProject referencing2= null; try { ParticipantTesting.reset(); String newProjectName= "newName"; p1= JavaProjectHelper.createJavaProject("p1", "bin"); referencing1= JavaProjectHelper.createJavaProject("p2", "bin"); referencing2= JavaProjectHelper.createJavaProject("p3", "bin"); JavaProjectHelper.addRTJar(referencing1); JavaProjectHelper.addRequiredProject(referencing1, p1); JavaProjectHelper.addSourceContainer(referencing1, "src"); JavaProjectHelper.addRTJar(referencing2); JavaProjectHelper.addRequiredProject(referencing2, p1); JavaProjectHelper.addSourceContainer(referencing2, "src"); JavaProjectHelper.addRTJar(p1); ParticipantTesting.reset(); String[] handles= ParticipantTesting.createHandles(p1, p1.getResource()); RenameJavaElementDescriptor descriptor= RefactoringSignatureDescriptorFactory.createRenameJavaElementDescriptor(IJavaRefactorings.RENAME_JAVA_PROJECT); descriptor.setJavaElement(p1); descriptor.setUpdateReferences(true); descriptor.setNewName(newProjectName); RenameRefactoring ref= (RenameRefactoring) createRefactoring(descriptor); assertTrue(ref.isApplicable()); RefactoringStatus result= performRefactoring(ref); assertEquals("not expected to fail", null, result); assertTrue("p1 is gone", !p1.exists()); ParticipantTesting.testRename(handles, new RenameArguments[] { new RenameArguments(newProjectName, true), new RenameArguments(newProjectName, true)}); p1= referencing1.getJavaModel().getJavaProject(newProjectName); assertTrue("p1 exists", p1.exists()); //check entries in referencing1 IClasspathEntry[] entries= referencing1.getRawClasspath(); assertEquals("expected entries", 3, entries.length); for (int i= 0; i < entries.length; i++) { IClasspathEntry iClassPathEntry= entries[i]; if (i == 1) { assertEquals("expected entry name", p1.getProject().getFullPath(), iClassPathEntry.getPath()); assertEquals("expected entry kind", IClasspathEntry.CPE_PROJECT, iClassPathEntry.getEntryKind()); } } //check entries in referencing2 entries= referencing2.getRawClasspath(); assertEquals("expected entries", 3, entries.length); for (int i= 0; i < entries.length; i++) { IClasspathEntry iClassPathEntry= entries[i]; if (i == 1) { assertEquals("expected entry name", p1.getProject().getFullPath(), iClassPathEntry.getPath()); assertEquals("expected entry kind", IClasspathEntry.CPE_PROJECT, iClassPathEntry.getEntryKind()); } } } finally { performDummySearch(); if (referencing1 != null && referencing1.exists()) JavaProjectHelper.removeSourceContainer(referencing1, "src"); if (referencing2 != null && referencing2.exists()) JavaProjectHelper.removeSourceContainer(referencing2, "src"); if (p1 != null && p1.exists()) JavaProjectHelper.delete(p1); if (referencing1 != null && referencing1.exists()) JavaProjectHelper.delete(referencing1); if (referencing2 != null && referencing2.exists()) JavaProjectHelper.delete(referencing2); } } public void test1() throws Exception { IJavaProject p1= null; IJavaProject referencing1= null; IJavaProject referencing2= null; try { ParticipantTesting.reset(); String newProjectName= "newName"; p1= JavaProjectHelper.createJavaProject("p1", "bin"); referencing1= JavaProjectHelper.createJavaProject("p2", "bin"); referencing2= JavaProjectHelper.createJavaProject("p3", "bin"); JavaProjectHelper.addRTJar(referencing1); IClasspathEntry cpe1= JavaCore.newProjectEntry(p1.getProject().getFullPath(), true); JavaProjectHelper.addToClasspath(referencing1, cpe1); JavaProjectHelper.addSourceContainer(referencing1, "src"); JavaProjectHelper.addRTJar(referencing2); IAccessRule[] accessRules2= new IAccessRule[] { JavaCore.newAccessRule(new Path("accessible"), IAccessRule.K_ACCESSIBLE) }; IClasspathAttribute[] extraAttributes2= new IClasspathAttribute[] { JavaCore.newClasspathAttribute("myTestAttribute", "val") }; IClasspathEntry cpe2= JavaCore.newProjectEntry(p1.getProject().getFullPath(), accessRules2, true, extraAttributes2, false); JavaProjectHelper.addToClasspath(referencing2, cpe2); JavaProjectHelper.addSourceContainer(referencing2, "src"); JavaProjectHelper.addRTJar(p1); ParticipantTesting.reset(); String[] handles= ParticipantTesting.createHandles(p1, p1.getResource()); RenameJavaElementDescriptor descriptor= RefactoringSignatureDescriptorFactory.createRenameJavaElementDescriptor(IJavaRefactorings.RENAME_JAVA_PROJECT); descriptor.setJavaElement(p1); descriptor.setUpdateReferences(true); descriptor.setNewName(newProjectName); RenameRefactoring ref= (RenameRefactoring) createRefactoring(descriptor); assertTrue(ref.isApplicable()); RefactoringStatus result= performRefactoring(ref); assertEquals("not expected to fail", null, result); assertTrue("p1 is gone", !p1.exists()); ParticipantTesting.testRename(handles, new RenameArguments[] { new RenameArguments(newProjectName, true), new RenameArguments(newProjectName, true)}); p1= referencing1.getJavaModel().getJavaProject(newProjectName); assertTrue("p1 exists", p1.exists()); //check entries in referencing1 IClasspathEntry[] entries= referencing1.getRawClasspath(); assertEquals("expected entries", 3, entries.length); IClasspathEntry iClassPathEntry= entries[1]; assertEquals("expected entry name", p1.getProject().getFullPath(), iClassPathEntry.getPath()); assertEquals("expected entry kind", IClasspathEntry.CPE_PROJECT, iClassPathEntry.getEntryKind()); assertEquals("expected entry isExported", true, iClassPathEntry.isExported()); assertEquals("expected entry combineAccessRules", true, iClassPathEntry.combineAccessRules()); assertEquals("expected entry accessRules count", 0, iClassPathEntry.getAccessRules().length); assertEquals("expected entry accessRules getExtraAttributes", 0, iClassPathEntry.getExtraAttributes().length); //check entries in referencing2 entries= referencing2.getRawClasspath(); assertEquals("expected entries", 3, entries.length); iClassPathEntry= entries[1]; assertEquals("expected entry name", p1.getProject().getFullPath(), iClassPathEntry.getPath()); assertEquals("expected entry kind", IClasspathEntry.CPE_PROJECT, iClassPathEntry.getEntryKind()); assertEquals("expected entry isExported", false, iClassPathEntry.isExported()); assertEquals("expected entry combineAccessRules", true, iClassPathEntry.combineAccessRules()); assertEquals("expected entry accessRules count", accessRules2.length, iClassPathEntry.getAccessRules().length); assertEquals("expected entry accessRules getExtraAttributes", extraAttributes2.length, iClassPathEntry.getExtraAttributes().length); } finally { performDummySearch(); if (p1 != null && p1.exists()) JavaProjectHelper.delete(p1); if (referencing1 != null && referencing1.exists()) JavaProjectHelper.delete(referencing1); if (referencing2 != null && referencing2.exists()) JavaProjectHelper.delete(referencing2); } } }